import vue from '@vitejs/plugin-vue';
import path, { resolve } from 'path';
import { UserConfig } from 'vite';
import { loadEnv } from './src/utils/viteBuild';
import vueSetupExtend from 'vite-plugin-vue-setup-extend';
import Components from 'unplugin-vue-components/vite';
// import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
import DefineOptions from 'unplugin-vue-define-options/vite';

import { VueMcp } from 'vite-plugin-vue-mcp'
import viteCompression from 'vite-plugin-compression'; // 引入 vite-plugin-compression
import { visualizer } from 'rollup-plugin-visualizer'; // 引入 rollup-plugin-visualizer
import jsResolve from '@rollup/plugin-node-resolve';

const pathResolve = (dir: string): any => {
	return resolve(__dirname, dir);
};

const { VITE_PORT, VITE_OPEN, VITE_PUBLIC_PATH } = loadEnv();

const alias: Record<string, string> = {
	'@': pathResolve('src'),
	'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
};

const viteConfig: UserConfig = {
	plugins: [
		vue(),
		VueMcp(),
		vueSetupExtend(),
		DefineOptions(),
		// createSvgIconsPlugin({
		// 	// 指定要缓存的文件夹
		// 	iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')],
		// 	// 指定symbolId格式
		// 	symbolId: '[name]',
		// }),
		Components({
			dirs: ['./src/components'],
			extensions: ['vue'],
			include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
		}),
		jsResolve(),
		viteCompression({ // 使用 vite-plugin-compression
			verbose: true, // 是否在控制台输出压缩结果
			disable: true, // 是否禁用压缩
			threshold: 10240, // 压缩前最小文件大小（字节）
			algorithm: 'brotliCompress', // 压缩算法
			ext: '.br', // 压缩文件扩展名
			compressionOptions: { // 设置 Brotli 压缩选项
				level: 11, // 压缩质量，范围从 0（最低压缩率）到 11（最高压缩率）
			},
			deleteOriginFile: true // 是否删除源文件
		}),
		visualizer({ // 使用 visualizer 插件
			open: true, // 是否在生成报告后自动打开浏览器
			gzipSize: true, // 是否显示 gzip 的大小
			brotliSize: true, // 是否显示 brotli 的大小
		}),

	],
	root: process.cwd(),
	resolve: { alias },
	base: process.env.NODE_ENV === 'production' ? VITE_PUBLIC_PATH : '/app/panel/',
	optimizeDeps: {
		include: ['element-plus/dist/locale/zh-cn.mjs', 'element-plus/dist/locale/en.mjs'],
	},
	server: {
		host: '0.0.0.0',
		proxy: {
			'/api': {
				target: 'https://l-l.cn',
				ws: true,
				changeOrigin: true,
				secure: true, // 如果目标是 https，设置为 true
				rewrite: (path) => path.replace(/^\/api/, '/api'),
			},
		},
	},
	esbuild: {
	},
	build: {
		outDir: 'deploy/dist',
		minify: 'terser',
		sourcemap: false,
		chunkSizeWarningLimit: 1500,
		rollupOptions: {
			output: {
				entryFileNames: `assets/[name].${new Date().getTime()}.js`,
				chunkFileNames: `assets/[name].${new Date().getTime()}.js`,
				assetFileNames: `assets/[name].${new Date().getTime()}.[ext]`,
			},
		},
		terserOptions: {
			compress: {
				drop_console: true, // 删除 console.log
			},
			mangle: true, // 混淆变量名
		},
	},
	css: { preprocessorOptions: { css: { charset: false } } },
	define: {
		__VUE_I18N_LEGACY_API__: JSON.stringify(false),
		__VUE_I18N_FULL_INSTALL__: JSON.stringify(false),
		__INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false),
	},
};

export default viteConfig;
